# frozen_string_literal: true

require 'watirspec_helper'

module Watir
  describe ElementCollection do
    before do
      browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
    end

    describe '#[]' do
      context 'when elements do not exist' do
        it 'returns not existing element' do
          expect(browser.elements(id: 'non-existing')[0]).not_to exist
        end
      end
    end

    describe '#eq and #eql?' do
      before { browser.goto WatirSpec.url_for('forms_with_input_elements.html') }

      it 'returns true if the two collections have the same Watir Elements' do
        a = browser.select_list(name: 'new_user_languages').options
        b = browser.select_list(id: 'new_user_languages').options

        expect(a).to eq b
        expect(a).to eql(b)
      end

      it 'returns false if the two collections are not the same' do
        a = browser.select_list(name: 'new_user_languages').options
        b = browser.select_list(id: 'new_user_role').options

        expect(a).not_to eq b
        expect(a).not_to eql(b)
      end
    end

    describe 'visible text' do
      it 'finds elements by visible text' do
        browser.goto WatirSpec.url_for('non_control_elements.html')
        container = browser.div(id: 'visible_text')

        expect(container.elements(visible_text: 'all visible').count).to eq(1)
        expect(container.elements(visible_text: /all visible/).count).to eq(1)
        expect(container.elements(visible_text: /some visible/).count).to eq(1)
      end

      it 'finds elements in spite of hidden text',
         except: {browser: :safari, reason: 'Safari is not filtering out hidden text'} do
        browser.goto WatirSpec.url_for('non_control_elements.html')
        container = browser.div(id: 'visible_text')

        expect(container.elements(visible_text: 'some visible').count).to eq(1)
        expect(container.elements(visible_text: 'none visible').count).to eq(0)
        expect(container.elements(visible_text: /none visible/).count).to eq(0)
      end
    end
  end
end
